perm filename CSREXP.LSP[MRS,LSP] blob sn#710801 filedate 1983-05-12 generic text, type T, neo UTF8
;   This File:  Commonsense Reasoning Experts and Associated Processes

(include "CSRDFS.LSP")

(DECLARE (special CONCL-LT-TYPE UQ-KERNEL-PATT S-PREM-LT-TYPE S-PREM-P-UNIT
		  SRT-PREM-LT-TYPE SRT-PREM-P-UNIT ANT-PREM-LT-TYPE
		  ANT-PREM-P-UNIT Q-KERNEL-PATT ) )
	 ; the above lambda-vars are used freely in predicates passed to
	 ;  context:pred-lookup.

;		This Page:  Matching Processes

(DEFMACRO HUNK-UQUANTP (LT-FORM)
   `(AND (HUNKP ,LT-FORM)
	 (EQ '∀ (LT-Q-DETERMINER ,LT-FORM)) ) )

(DEFMACRO LT-QUANT-TERM-SORT (QT-PAIR)
 `(LT-QSORT (CDR ,QT-PAIR)) )

(DEFMACRO LT-LITERAL-MATCH (DATUM PATT)
 `(LET ((D-TYPE (LT-TYPE ,DATUM))
	(P-TYPE (LT-TYPE ,PATT)) )
       (COND ((EQ D-TYPE P-TYPE)
		(CASEQ D-TYPE
		  (ATOMICPROPO (LT-SIMPLE-ATOMIC-MATCH ,DATUM ,PATT))
		  (NEGPROPO (LT-SIMPLE-ATOMIC-MATCH 
				(ARGUMENT (CAR (ROLELINKS ,DATUM)))
				(ARGUMENT (CAR (ROLELINKS ,PATT))) ))
		  (T NIL) ) )
	     (T NIL) ) ) )

(DEFUN AT-MATCH (DATUM PATT)
;(break at-match:test)
  (COND ((EQ DATUM PATT) T)
	((AND (ISA-QUANT-TERM PATT)
	      (ISA-SUPERSORT-OF (LT-QUANT-TERM-SORT PATT)
			     (TERMSORT DATUM) ) )
	   (LIST (CONS DATUM PATT)) )
	(T (LT-LITERAL-MATCH DATUM PATT)) ) )

; This fn assumes that (LT-TYPE DATUM) and (LT-TYPE PATT) are both ATOMICPROPO.
(DEFUN LT-SIMPLE-ATOMIC-MATCH (DATUM PATT &aux D-ITEM P-ITEM)
  (SETQ D-ITEM (PFC-CONCEPT DATUM)  P-ITEM (PFC-CONCEPT PATT))
  (COND ((OR (EQ D-ITEM P-ITEM)
	     (ISA-PATT-VARIABLE? P-ITEM) )
	   (DO ((D-RLTAIL (ROLELINKS DATUM) (CDR D-RLTAIL))
		(P-RLTAIL (ROLELINKS PATT) (CDR D-RLTAIL))
		(BINDINGS) )
	       ((OR (NULL D-RLTAIL) (NULL P-RLTAIL))
		  (COND ((AND (NULL D-RLTAIL) (NULL P-RLTAIL))
			   (OR BINDINGS T) )) )
	       (COND ((NOT (EQ (ROLEMARK (CAR D-RLTAIL))
			       (ROLEMARK (CAR P-RLTAIL)) ))
			(RETURN NIL) ))
	       (SETQ D-ITEM (ARGUMENT (CAR D-RLTAIL))
		     P-ITEM (ARGUMENT (CAR P-RLTAIL)) )
	       (COND ((OR (EQ D-ITEM P-ITEM)
			  (ISA-PATT-VARIABLE? P-ITEM) )
		        (PUSH (CONS D-ITEM P-ITEM) BINDINGS) )
		     ((AND (ISA-QUANT-TERM P-ITEM)
			   (ISA-SUPERSORT-OF (LT-QUANT-TERM-SORT P-ITEM)
					  (TERMSORT D-ITEM) ) )
		        (COND ((EQ '∀ (LT-Q-DETERMINER D-ITEM))
			         (PUSH (CONS D-ITEM P-ITEM) BINDINGS) )
			      (T (BREAK |LT-SIMP-A-M - quantifier punt!|)) ) )
		     (T (RETURN NIL)) ) ) )
	(T NIL) ) )

(DEFMACRO UQ-KERNEL-TYPE-CHECK (DESCRIPTION-A-LIST PROPO-LT-TYPE)
 `(LET ((LT-TYPE*UQ-KERNEL (A-Q-GET ,DESCRIPTION-A-LIST 'LT-TYPE*UQ-KERNEL)))
       (OR (EQ ,PROPO-LT-TYPE LT-TYPE*UQ-KERNEL)
	   (EQ 'QT-PAIR LT-TYPE*UQ-KERNEL) ) ) )

(DEFMACRO UQ-⊃-KERNEL-TYPE-CHECK (DESCRIPTION-A-LIST PROPO-LT-TYPE)
 `(LET ((LT-TYPE*UQ-⊃-KERNEL (A-Q-GET ,DESCRIPTION-A-LIST 'LT-TYPE*UQ-⊃-KERNEL)))
       (OR (EQ ,PROPO-LT-TYPE LT-TYPE*UQ-⊃-KERNEL)
	   (EQ 'QT-PAIR LT-TYPE*UQ-⊃-KERNEL) ) ) )

;		      Lists of Experts

(SETQ *ALL-R-RULE-EXPERTS-LIST* (LIST

(MAKE-REASONING-EXPERT
  TYPE 'RULE-EXPERT
  R∨H-NAME 'QUANTIFIED-MODUS-PONENS
  DESCRIPTION ()
  FORWARD-METHOD  ()
  BACKWARD-METHOD #'QUANT-MP-B-METHOD2
  FM-PREDICATES ()
  BM-PREDICATE #'QUANT-MP-BM-PREDICATE2 )

(MAKE-REASONING-EXPERT
  TYPE 'RULE-EXPERT
  R∨H-NAME 'STATISTICAL-SYLLOGISM
  DESCRIPTION ()
  FORWARD-METHOD  ()
  BACKWARD-METHOD #'STATIST-B-METHOD
  FM-PREDICATES ()
  BM-PREDICATE #'STATIST-BM-PREDICATE1 )

(MAKE-REASONING-EXPERT
  TYPE 'RULE-EXPERT
  R∨H-NAME 'SUBJUNCTIVE-CONDITIONALIZATION
  DESCRIPTION ()
  FORWARD-METHOD  ()
  BACKWARD-METHOD #'SBJCOND-B-METHOD
  FM-PREDICATES ()
  BM-PREDICATE #'SBJCOND-BM-PREDICATE1 )

(MAKE-REASONING-EXPERT
  TYPE 'RULE-EXPERT
  R∨H-NAME 'CONJUCTION
  DESCRIPTION ()
  FORWARD-METHOD  ()
  BACKWARD-METHOD #'CONJUNCT-B-METHOD
  FM-PREDICATES ()
  BM-PREDICATE #'CONJUNCT-BM-PREDICATE )

(MAKE-REASONING-EXPERT
   TYPE 'RULE-EXPERT
   R∨H-NAME 'CAUSAL-INFLUENCE
   DESCRIPTION ()
   FORWARD-METHOD  ()
   BACKWARD-METHOD ()
   FM-PREDICATES ()
   BM-PREDICATE () )	;; an applicability condition for BACKWARD-METHOD
;( MATCH-DESCRIPTIONS 
;   '((IL-PREM-DESCR . ()) ;; mnemonic for: Influence-Law Premise-DESCRiption
;     (CC-PREM-DESCR . ()) ;; mnemonic for: Causal-Condition Premise-DESCRiption
;     (CONCL-DESCR .	   ;; mnemonic for: CONCLusion-DESCRiption
;	(LAMBDA (CONCL) NIL) ) ) )

(MAKE-REASONING-EXPERT
   TYPE 'RULE-EXPERT
   R∨H-NAME 'CAUSAL-ACTION
   DESCRIPTION ()
   FORWARD-METHOD  ()
   BACKWARD-METHOD ()  ;; #'CAUSAL-ACTION-B-METHOD
   FM-PREDICATES ()
   BM-PREDICATE () ) ;; #'CAUSAL-ACTION-BM-PRED1
;( MATCH-DESCRIPTIONS 
;   '((AL-PREM-DESCR ())  ;; mnemonic for: causal Action-Law PREMise-DESCRiption
;     (I-PREMS-DESCR ())  ;; mnemonic for: Influence PREMiseS-DESCRiption
;     (C-M-PREM-DESCR ()) ;; mnemonic for: Completeness Meta-PREMise-DESCRiption
;     (CONCL-DESCR .	  ;; mnemonic for: CONCLusion-DESCRiption
;	(LAMBDA (CONCL) NIL) ) ) )

)) 	;; End of the rule-expert list

(SETQ *ALL-R-HEURISTIC-EXPERTS-LIST* (LIST

(MAKE-REASONING-EXPERT
	TYPE 'HEURISTIC-EXPERT
	R∨H-NAME 'NORMAL-EVENT-CHAIN
	DESCRIPTION ()
	FORWARD-METHOD  ()
	BACKWARD-METHOD ()
	FM-PREDICATES ()
	BM-PREDICATE () )
;	MATCH-DESCRIPTIONS 
;	 '((NORM-ADV-PATT ())   ;; mnemonic for: NORMality-ADVice PATTern
;	   (PREM1-PATT ())    ;; mnemonic: PATTern for 1st PREMise-link in chain
;	   (CONCL-PATT ()) )  ;; mnemonic for: CONCLusion-PATTern

)) 	;; End of the heuristic-expert list
;		Subjunctive Conditional Proof

(DEFUN SBJCOND-BM-PREDICATE1 (CONCL-EXPR)
  (EQ 'IF-WOULD-PROPO (LT-TYPE CONCL-EXPR)) )
   ;; We don't want to investigate the negation of CONCL-EXPR in a separate
   ;;  high-level task, since creation of a new r-graph is involved.  Instead
   ;;  we can arrange, at the level of new r-graph creation, to investigate
   ;;  the negation as well as the major contrary of CONCL-EXPR.

(DEFUN SBJCOND-B-METHOD (RP-TGT-NODE)
 (LET* ((R-GRAPH (RP-NODE-R-GRAPH RP-TGT-NODE))
	(CONCL-EXPR (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)))
	(ANTE-SITUATION (CONTEXT:SPROUT-CONTEXT -REALWORLD-))
	 ;; We'll need some sort of time-conditional visibility of -REALWORLD-
	 ;;  in ANTE-SITUATION -- using a filtering-predicate rather than
	 ;;  a deletion-list.  We need a subset-predicate arg to CONTEXT:SPROUT.
	(ANTE-P-UNIT (NRML-ANL-YZE (ANTECEDENT CONCL-EXPR)))
	(ANTE-SUPPOSITION (MAKE-BELIEF
			    TYPE 'SUPPOSITION
			    P-UNIT ANTE-P-UNIT
			    WT-CNTXT ANTE-SITUATION
			    EPISTATUS () ))
	(CONSE-QUERY (MAKE-QUERY
			P-UNIT (NRML-ANL-YZE (CONSEQUENT CONCL-EXPR))
			WT-CNTXT ANTE-SITUATION )) )
       (CONTEXT:ADD ANTE-SUPPOSITION ANTE-SITUATION)
       (MULTIPLE-VALUE-BIND
	      (CONCLUSIVE? CONCL MEM-BLF STOP-REAS EFFORT TASK-REC RGRAPH)
	      (CSR:INVESTIGATE-FROM-MEMORY
		CONSE-QUERY
		`((MAX-EFFORT . ,(- MAX-EFFORT CURRENT-TOTAL-EFFORT))
		   ;; the specvars MAX-EFFORT and CURRENT-TOTAL-EFFORT
		   ;;  are bound in the fn CSR:FIND-CONSIDERATIONS.
		  (CONCLUSIVENESS-LEVEL . ,(A-Q-GET REAS-SPECS
						    'CONCLUSIVENESS-LEVEL ))
		   ;; specvar REAS-SPECS is bound in fn CSR:FIND-CONSIDERATIONS.
		  (EXTRA-TARGETS . NIL)		;; sbj-negation-possibilities
		  (RECORD-BELIEF? . NO) ) )
	 (COND ((EQ 'SUFFICIENT CONCLUSIVE?)	;; we have a cnd-prf-conclusion
; code to wide to indent properly
(LET* ((PREM-NODES
	 (MAPCAN #'(LAMBDA (RP-NODE)
		     (COND  ((AND (NOT (EQ ANTE-P-UNIT
					   (BELIEF-P-UNIT
						(RP-NODE-CONTENT RP-NODE) ) ))
				  (SOME (RP-NODE-PART-CONSIDS RP-NODE)
					#'(LAMBDA (CNSD)
					    (NULL (CONSID-GOAL-NODES CNSD)) ) ) )
			       (NCONS (CSR:UPDATE-R-GRAPH
					   (RP-NODE-CONTENT RP-NODE)
					   R-GRAPH
					   'KNOWLEDGE 'BASIS )) )) )
		 (R-GRAPH-K-BASIS RGRAPH) ) )
       (NEW-CONSID (MAKE-REASONING-CONSIDERATION-LINK
		      R-GRAPH R-GRAPH
		      RULE 'SUBJUNCTIVE-CONDITIONALIZATION
		      PREM-NODES PREM-NODES
		      CONCL-NODE RP-TGT-NODE ))
       (CONCL-EPISTATUS (BELIEF-EPISTATUS (RP-NODE-CONTENT RP-TGT-NODE)) ) )
      (CSR:INSTALL-CONSID-LINK NEW-CONSID)
      ;; next, return stuff from the lower r-graph to the upper, putting the
      ;;  lower r-graph and task-record in a bl-grounds slot of an rp-node.
      (SETF* (EPIST-BL-GROUNDS CONCL-EPISTATUS)
	     (A-Q-PUTPROP -*- RGRAPH 'CONDITIONAL-PROOF-R-GRAPH) )
      (A-Q-PUTPROP (EPIST-BL-GROUNDS CONCL-EPISTATUS) TASK-REC
		   'CONDITIONAL-PROOF-TASK-RECORD )
      (A-Q-PUTPROP (EPIST-BL-GROUNDS CONCL-EPISTATUS)
		   `((STOP-REAS . ,STOP-REAS) (EFFORT . ,EFFORT))
		   'CONDITIONAL-PROOF-DATA )
      `((TRIAL-RESULT . SUCCESS)	;; returns a TRIAL-REPORT a-list.
	(NUMBER-OF-NEW-CONSIDS . 1) ) ) )
; re-indent to proper depth
	       (T	;; we have no conditional-proof-conclusion
		  `((TRIAL-RESULT . FAILURE)
		    (CONDITIONAL-PROOF-R-GRAPH . ,RGRAPH)
		    (CONDITIONAL-PROOF-TASK-RECORD . ,TASK-REC)
		    (CONDITIONAL-PROOF-DATA . ((STOP-REAS . ,STOP-REAS)
					       (EFFORT . ,EFFORT) )) ) ) ) ) ) )
;			Conjunction

(DEFUN CONJUNCT-BM-PREDICATE (CONCL-EXPR)
  (EQ 'CONJ-PROPO (LT-TYPE CONCL-EXPR)) )

(DEFUN CONJUNCT-B-METHOD (RP-TGT-NODE)
;(WRITE T "CONJ-CONCL: "
;	  (DISPLAY (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)) 13.) )
 (LET* ((CONCL-EXPR (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)))
	 ;; conclusion expression
	(R-GRAPH (RP-NODE-R-GRAPH RP-TGT-NODE))
; should we normalize and use the normal conjuncts?
	(CONJUNCT-NODES
	  (MAPCAR #'(LAMBDA (ROLINK)
		      () )
		  (ROLELINKS CONCL-EXPR) ) ) )
       '((TRIAL-RESULT . FAILURE)
	 (FAILURE-REASON . |Unfinished B-Method|) ) ) )
;		Quantified Modus Ponens  (New Version)

;;; This version cannot yet handle premises with no ⊃-kernel.
;;;  Thus, the use of UQ-KERNEL-TYPE-CHECK, etc. needs to be folded in properly.

(DEFUN QUANT-MP-BM-PREDICATE2 (CONCL-EXPR)
 ;(MEMQ (LT-QQU-TYPE CONCL-EXPR) '(ATOMICPROPO CONN-PROPO QUANTIFIERFORM))
 (MEMQ (LT-TYPE CONCL-EXPR) '(ATOMICPROPO NEGPROPO)) )
; This is somewhat overly narrow.  Ideally, this predicate would return
;  T iff CONCL-EXPR contains some quantifiable individual term.
;  (But what if it instantiates a universally quantified affairstate variable?)

(DECLARE (special CONCL-EXPR))

(DEFUN QUANT-MP-B-METHOD2 (RP-TGT-NODE)
;(WRITE T "QMP2-CONCL: "
;	  (DISPLAY (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)) 13.) )
 (LET* ((CONCL-EXPR (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)))
	 ;; conclusion expression
	(R-GRAPH (RP-NODE-R-GRAPH RP-TGT-NODE))
	(CONCL-LT-TYPE (LT-TYPE CONCL-EXPR))
	(NEW-CONSID-LINKS) )
       (MULTIPLE-VALUE-BIND (KF-Q-PREM-CANDS RC-Q-PREM-CANDS)
	;;  KF-: knowledge-frontier beliefs, RC-: reasoning-context beliefs
	;;  Both are lists of q-premise candidates.  Eventually, we'll need to
	;;   eliminate any possible duplications of beliefs in these two lists.
	  (CSR:KNOWLEDGE-LOOKUP-ALL
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(AND (EQ 'QUANTIFIERFORM (A-Q-GET *DAL* 'LT-TYPE))
		     (EQ '∀ (A-Q-GET *DAL* 'LT-Q-DETERMINER))
		     (UQ-⊃-KERNEL-TYPE-CHECK *DAL* CONCL-LT-TYPE) ) )
	    #'(LAMBDA (*UNIT*) 
		(AT-MATCH CONCL-EXPR (UQ-⊃-KERNEL (GET *UNIT* 'LT-FORMULA))) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) )
;(cond (rc-q-prem-cands (break qmp:test)))
;(break qmp:test)
      ;; body of mult-val-bind of KF-Q-PREM-CANDS and RC-Q-PREM-CANDS.
      (MAPC #'(LAMBDA (Q-PREM-CAND-PAIR)	;; (<belief> . <bindings>)
		(LET* (((Q-PREM-CAND . Q-BINDINGS) Q-PREM-CAND-PAIR)
		       (Q-PREM-WFF (BELIEF-FORMULA Q-PREM-CAND))
		       (SRT-PREM-BLF∨QRY-LIST	;; the sortal premises
; code too wide to indent
(MAPCAR #'(LAMBDA (Q-BINDING)  ;;  (<d-item> . <qt-pair>)
	    (LET ((SRT-PREM-WFF		;; a sortal premise wff
		    (LT-SUBST Q-BINDINGS (LT-QSORT-EXPR (CDDR Q-BINDING))) ))
		 (COND ((AND (ISA-SIMPLE-SORT-PROPO SRT-PREM-WFF)
			     (OR (SORTALLY-CERTAIN? SRT-PREM-WFF)
				 (SORTALLY-NEG-CERTAIN? SRT-PREM-WFF) )))
		       (
     ;; code too wide to indent properly
     (LET ((SRT-PREM-LT-TYPE (LT-TYPE SRT-PREM-WFF))
	   (SRT-PREM-P-UNIT (NRML-ANL-YZE SRT-PREM-WFF)) )
	  (CSR:KNOWLEDGE-LOOKUP
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(EQ SRT-PREM-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE)) )
	    #'(LAMBDA (*UNIT*) 
		(EQ *UNIT* SRT-PREM-P-UNIT) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) ) ) )
    (T (MAKE-QUERY P-UNIT (NRML-ANL-YZE SRT-PREM-WFF)
		   WT-CNTXT (R-GRAPH-RB-CONTEXT R-GRAPH) )) ) ) )
Q-BINDINGS ) ) )
; end of computation of SRT-PREM-BLF∨QRY-LIST, each member of which
;  will be EQ either to SORTALLY-CERTAIN, or SORTALLY-NEG-CERTAIN,
;  or a known <mem-blf>, or a new <query>.
; code too wide to indent properly
; body of main LET* in MAPC lambda-fn mapping Q-PREM-CAND-PAIRs
(COND ((MEMQ 'SORTALLY-NEG-CERTAIN SRT-PREM-BLF∨QRY-LIST))
       ;; in the case above, quit and move to next Q-PREM-CAND-PAIR
      (T (LET* ((ANT-PREM-WFF   ;; the instantiated-antecedent premise
		  (LT-SUBST Q-BINDINGS (ANTECEDENT (UQ-KERNEL Q-PREM-WFF))) )
		(ANT-PREM-P-UNIT (NRML-ANL-YZE ANT-PREM-WFF))
		(ANT-PREM-LT-TYPE (LT-TYPE ANT-PREM-WFF))
		(ANT-PREM-BLF∨QRY
		  (COND
		    ((CSR:KNOWLEDGE-LOOKUP
		       R-GRAPH
		       #'(LAMBDA (*DAL*) 
			   (EQ ANT-PREM-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE)) )
		       #'(LAMBDA (*UNIT*) 
			   (EQ *UNIT* ANT-PREM-P-UNIT) )
		       #'(LAMBDA (*EPS*) 
			   (≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) )))
		    (T (MAKE-QUERY P-UNIT ANT-PREM-P-UNIT
				   WT-CNTXT (R-GRAPH-RB-CONTEXT R-GRAPH) )) ) ))
		     ;; but what if only the *EPS*-test failed?
;(break qmp:test)
; code too wide to indent properly -- body of the previous LET*
(LET* ((Q-PREM-NODE
	(CSR:UPDATE-R-GRAPH Q-PREM-CAND R-GRAPH 'KNOWLEDGE 'BASIS) )
       (SRT-PREM-NODE-LIST
	(MAPCAN
    ; too wide to indent fully
    #'(LAMBDA (SRT-PREM-BLF∨QRY)
	(COND ((EQ 'SORTALLY-CERTAIN SRT-PREM-BLF∨QRY) NIL)
	      ((EQ 'KNOWLEDGE (BELIEF-TYPE SRT-PREM-BLF∨QRY))
		(NCONS
	         (CSR:UPDATE-R-GRAPH SRT-PREM-BLF∨QRY R-GRAPH 'KNOWLEDGE 'BASIS) ))
	      ((EQ 'QUERY (BELIEF-TYPE SRT-PREM-BLF∨QRY))
		(NCONS
	         (CSR:UPDATE-R-GRAPH SRT-PREM-BLF∨QRY R-GRAPH 'TARGET 'FRONTIER) ))
	      (T (BREAK |QUANT-MP-B-METHOD2 - bad SRT-PREM-BLF∨QRY|)) ) )
    SRT-PREM-BLF∨QRY-LIST ) )
       (ANT-PREM-NODE
	(COND ((EQ 'KNOWLEDGE (BELIEF-TYPE ANT-PREM-BLF∨QRY))
	        (CSR:UPDATE-R-GRAPH ANT-PREM-BLF∨QRY R-GRAPH 'KNOWLEDGE 'BASIS) )
	      ((EQ 'QUERY (BELIEF-TYPE ANT-PREM-BLF∨QRY))
	         (CSR:UPDATE-R-GRAPH ANT-PREM-BLF∨QRY R-GRAPH 'TARGET 'FRONTIER) )
	      (T (BREAK |QUANT-MP-B-METHOD2 - bad ANT-PREM-BLF∨QRY|)) ) )
       (GOAL-NODES
	(NCONC (MAPCAN #'(LAMBDA (SRT-PREM-NODE)
			   (COND ((AND SRT-PREM-NODE
				       (EQ 'TARGET (RP-NODE-TYPE SRT-PREM-NODE)) )
				    (NCONS SRT-PREM-NODE) )) )
		       SRT-PREM-NODE-LIST )
	       (COND ((EQ 'TARGET (RP-NODE-TYPE ANT-PREM-NODE))
		        (NCONS ANT-PREM-NODE) )) ) )
       (NEW-CONSID
	(MAKE-QMP-CONSID
	  ; the following are CONSID- slots INCLUDEd in QMP-CONSID
	  R-GRAPH R-GRAPH
	  PREM-NODES (CONS Q-PREM-NODE (APPEND SRT-PREM-NODE-LIST
					       (NCONS ANT-PREM-NODE) ))
	  CONCL-NODE RP-TGT-NODE
	  GOAL-NODES GOAL-NODES ) ) )
      (CSR:INSTALL-CONSID-LINK NEW-CONSID)
      (PUSH NEW-CONSID NEW-CONSID-LINKS) ) ) ) ) ) )
	      ;; 2nd arg to earlier MAPC
	     (NCONC KF-Q-PREM-CANDS RC-Q-PREM-CANDS) )
	      ;; eventually, we'll want to eliminate any duplications
	      ;;  in these two lists before NCONCing them.
       (COND (NEW-CONSID-LINKS		;; returns a TRIAL-REPORT a-list.
		`((TRIAL-RESULT . SUCCESS)
		  (NUMBER-OF-NEW-CONSIDS . ,(LENGTH NEW-CONSID-LINKS)) ) )
	     (T '((TRIAL-RESULT . FAILURE))) ) ) ) )

(DECLARE (unspecial CONCL-EXPR))
;		Statistical Syllogism  (Old Version)

(DEFUN STATIST-BM-PREDICATE1 (CONCL-EXPR)
  (OR (AND (EQ 'ATOMICPROPO (LT-TYPE CONCL-EXPR))
	   (= (LENGTH CONCL-EXPR) 2) )
      (AND (EQ 'NEGPROPO (LT-TYPE CONCL-EXPR))
	   (STATIST-BM-PREDICATE1 (ARGUMENT (CAR (ROLELINKS CONCL-EXPR)))) ) ) )
; This is just a temporary hack.  In general, this predicate should return
;  T iff CONCL-EXPR contains some quantifiable individual term.

(DEFUN STATIST-B-METHOD (RP-TGT-NODE)
 (LET* ((CONCL-EXPR (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)))
	 ;; conclusion expression
	(R-GRAPH (RP-NODE-R-GRAPH RP-TGT-NODE))
	(CONCL-LT-TYPE (LT-TYPE CONCL-EXPR))
	(CONCL-SUBJ
	   (CASEQ CONCL-LT-TYPE		;; this is just a temporary hack
	     (ATOMICPROPO
	       (ARGUMENT (CAR (ROLELINKS CONCL-EXPR))) )
	     (NEGPROPO
	       (ARGUMENT (CAR (ROLELINKS
			       (ARGUMENT (CAR (ROLELINKS CONCL-EXPR)))))))
	     (T 'PUNT NIL) ))
	(Q-KERNEL-PATT
	   (COND ((#.(ISA-OF:LT . PFC-FORMULA) CONCL-EXPR)
		    (SUBST '?X CONCL-SUBJ CONCL-EXPR) )
		 (T 'PUNT NIL) ) )
	 ;; In general, one Q-KERNEL-PATT can be obtained for each different way
	 ;;  of substituting '?X' for an individual term in CONCL-EXPR.  For
	 ;;  large exprs, there will be many such ways, and some heuristic
	 ;;  guidance will be needed to explore only the most promising of them.
	(NEW-CONSID-LINKS) )
       (MULTIPLE-VALUE-BIND (KF-STAT-PREM-CANDS RC-STAT-PREM-CANDS)
	;; 	 knowledge-frontier beliefs, reasoning-context beliefs
	;;  Both are lists of stat-premise candidates.  Eventually, we'll need to
	;;   eliminate any possible duplications of beliefs in these two lists.
	  (CSR:KNOWLEDGE-LOOKUP-ALL
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(AND (EQ 'QUANTIFIERFORM (A-Q-GET *DAL* 'LT-TYPE))
		     (EQ 'GREAT-MAJORITY (A-Q-GET *DAL* 'LT-Q-DETERMINER))
		     (EQ CONCL-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE*UQ-KERNEL)) ) )
	    #'(LAMBDA (*UNIT*) 
		(AT-MATCH (UQ-KERNEL (GET *UNIT* 'LT-FORMULA)) Q-KERNEL-PATT) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) )
      (MAPC #'(LAMBDA (STAT-PREM-CAND)	;; a belief
		(LET* ((STAT-PREM-WFF (BELIEF-FORMULA STAT-PREM-CAND))
		       (QSORT-EXPR (LT-QSORT-EXPR STAT-PREM-WFF))
		       (S-PREM-WFF
			  (SUBST CONCL-SUBJ STAT-PREM-WFF QSORT-EXPR) )
			   ;; recall that quantified terms are pointers to
			   ;;  the quantified expressions in which they occur.
		       (S-PREM-P-UNIT (NRML-ANL-YZE S-PREM-WFF))
		       (S-PREM-LT-TYPE (LT-TYPE S-PREM-WFF))
		       (S-PREM-BELIEF
	   ;; code too wide to indent properly
	  (CSR:KNOWLEDGE-LOOKUP
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(EQ S-PREM-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE)) )
	    #'(LAMBDA (*UNIT*) 
		(EQ *UNIT* S-PREM-P-UNIT) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) ) ) )
    ;; code too wide to indent properly
    (COND (S-PREM-BELIEF	;; complete success
	   (LET* ((STAT-PREM-NODE
		   (CSR:UPDATE-R-GRAPH STAT-PREM-CAND R-GRAPH 'KNOWLEDGE 'BASIS) )
		  (S-PREM-NODE
		   (CSR:UPDATE-R-GRAPH S-PREM-BELIEF R-GRAPH 'KNOWLEDGE 'BASIS) )
		  (NEW-CONSID
		   (MAKE-STAT-CONSID
		     STAT-PREM-NODE STAT-PREM-NODE
		     S-PREM-NODE S-PREM-NODE
		     ; the following are CONSID- slots INCLUDEd in STAT-CONSID
		     R-GRAPH R-GRAPH
		     PREM-NODES (LIST STAT-PREM-NODE S-PREM-NODE)
		     CONCL-NODE RP-TGT-NODE ) ) )
		 (CSR:INSTALL-CONSID-LINK NEW-CONSID)
		 (PUSH NEW-CONSID NEW-CONSID-LINKS) ) )
	  (T	    ;; partial success -- in this case we set up a GOAL-consid
	     (LET* ((STAT-PREM-NODE
		     (CSR:UPDATE-R-GRAPH STAT-PREM-CAND R-GRAPH 'KNOWLEDGE 'BASIS) )
		    (S-PREM-QUERY
		      (MAKE-QUERY
			 P-UNIT (NRML-ANL-YZE S-PREM-WFF)
			 WT-CNTXT (R-GRAPH-RB-CONTEXT R-GRAPH) ) )
		    (S-PREM-NODE
		     (CSR:UPDATE-R-GRAPH S-PREM-QUERY R-GRAPH 'TARGET 'FRONTIER))
		    (NEW-CONSID
		     (MAKE-STAT-CONSID
		       STAT-PREM-NODE STAT-PREM-NODE
		       S-PREM-NODE S-PREM-NODE
		       ; the following are CONSID- slots INCLUDEd in STAT-CONSID
		       R-GRAPH R-GRAPH
		       PREM-NODES (LIST STAT-PREM-NODE S-PREM-NODE)
		       CONCL-NODE RP-TGT-NODE
		       GOAL-NODES (NCONS S-PREM-NODE) ) ) )
		   (CSR:INSTALL-CONSID-LINK NEW-CONSID)
		   (PUSH NEW-CONSID NEW-CONSID-LINKS) ) ) ) ) )
	     (NCONC KF-STAT-PREM-CANDS RC-STAT-PREM-CANDS) )
	      ;; eventually, we'll want to eliminate any duplications
	      ;;  in these two lists before NCONCing them.
       (COND (NEW-CONSID-LINKS		;; returns a TRIAL-REPORT a-list.
		`((TRIAL-RESULT . SUCCESS)
		  (NUMBER-OF-NEW-CONSIDS . ,(LENGTH NEW-CONSID-LINKS)) ) )
	     (T '((TRIAL-RESULT . FAILURE))) ) ) ) )
;		Quantified Modus Ponens  (Old Version)

(DEFUN QUANT-MP-BM-PREDICATE1 (CONCL-EXPR)
 (OR (AND (EQ 'ATOMICPROPO (LT-TYPE CONCL-EXPR))
	  (= (LENGTH CONCL-EXPR) 2) )
     (AND (EQ 'NEGPROPO (LT-TYPE CONCL-EXPR))
	  (QUANT-MP-BM-PREDICATE1 (ARGUMENT (CAR (ROLELINKS CONCL-EXPR)))) ) ) )
; This is just a temporary hack.  In general, this predicate should return
;  T iff CONCL-EXPR contains some quantifiable individual term.

(DEFUN QUANT-MP-B-METHOD (RP-TGT-NODE)
 (LET* ((CONCL-EXPR (QUERY-FORMULA (RP-NODE-CONTENT RP-TGT-NODE)))
	 ;; conclusion expression
	(R-GRAPH (RP-NODE-R-GRAPH RP-TGT-NODE))
	(CONCL-LT-TYPE (LT-TYPE CONCL-EXPR))
	(CONCL-SUBJ
	   (CASEQ CONCL-LT-TYPE		;; this is just a temporary hack
	     (ATOMICPROPO
	       (ARGUMENT (CAR (ROLELINKS CONCL-EXPR))) )
	     (NEGPROPO
	       (ARGUMENT (CAR (ROLELINKS
			       (ARGUMENT (CAR (ROLELINKS CONCL-EXPR)))))))
	     (T 'PUNT NIL) ))
	(Q-KERNEL-PATT
	   (COND ((#.(ISA-OF:LT . PFC-FORMULA) CONCL-EXPR)
		    (SUBST '?X CONCL-SUBJ CONCL-EXPR) )
		 (T 'PUNT NIL) ) )
	 ;; In general, one Q-KERNEL-PATT can be obtained for each different way
	 ;;  of substituting '?X' for an individual term in CONCL-EXPR.  For
	 ;;  large exprs, there will be many such ways, and some heuristic
	 ;;  guidance will be needed to explore only the most promising of them.
	(NEW-CONSID-LINKS) )
       (MULTIPLE-VALUE-BIND (KF-Q-PREM-CANDS RC-Q-PREM-CANDS)
	;; 	 knowledge-frontier beliefs, reasoning-context beliefs
	;;  Both are lists of q-premise candidates.  Eventually, we'll need to
	;;   eliminate any possible duplications of beliefs in these two lists.
	  (CSR:KNOWLEDGE-LOOKUP-ALL
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(AND (EQ 'QUANTIFIERFORM (A-Q-GET *DAL* 'LT-TYPE))
		     (EQ '∀ (A-Q-GET *DAL* 'LT-Q-DETERMINER))
		     (EQ CONCL-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE*UQ-KERNEL)) ) )
	    #'(LAMBDA (*UNIT*) 
		(AT-MATCH (UQ-KERNEL (GET *UNIT* 'LT-FORMULA)) Q-KERNEL-PATT) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) )
;(cond (rc-q-prem-cands (break qmp:test)))
      (MAPC #'(LAMBDA (Q-PREM-CAND)	;; a belief
		(LET* ((Q-PREM-WFF (BELIEF-FORMULA Q-PREM-CAND))
		       (QSORT-EXPR (LT-QSORT-EXPR Q-PREM-WFF))
		       (S-PREM-WFF
			  (SUBST CONCL-SUBJ Q-PREM-WFF QSORT-EXPR) )
			   ;; recall that quantified terms are pointers to
			   ;;  the quantified expressions in which they occur.
		       (S-PREM-P-UNIT (NRML-ANL-YZE S-PREM-WFF))
		       (S-PREM-LT-TYPE (LT-TYPE S-PREM-WFF))
		       (S-PREM-BELIEF
	   ;; code too wide to indent properly
	  (CSR:KNOWLEDGE-LOOKUP
	    R-GRAPH
	    #'(LAMBDA (*DAL*) 
		(EQ S-PREM-LT-TYPE (A-Q-GET *DAL* 'LT-TYPE)) )
	    #'(LAMBDA (*UNIT*) 
		(EQ *UNIT* S-PREM-P-UNIT) )
	    #'(LAMBDA (*EPS*) 
		(≥-BEL-LEVEL (EPIST-BEL-LEVEL *EPS*) 'VERY-LIKELY) ) ) ) )
;(break qmp:test)
    ;; code too wide to indent properly
    (COND (S-PREM-BELIEF	;; complete success
	   (LET* ((Q-PREM-NODE
		   (CSR:UPDATE-R-GRAPH Q-PREM-CAND R-GRAPH 'KNOWLEDGE 'BASIS) )
		  (S-PREM-NODE
		   (CSR:UPDATE-R-GRAPH S-PREM-BELIEF R-GRAPH 'KNOWLEDGE 'BASIS) )
		  (NEW-CONSID
		   (MAKE-QMP-CONSID
		     ; the following are CONSID- slots INCLUDEd in QMP-CONSID
		     R-GRAPH R-GRAPH
		     PREM-NODES (LIST Q-PREM-NODE S-PREM-NODE)
		     CONCL-NODE RP-TGT-NODE ) ) )
		 (CSR:INSTALL-CONSID-LINK NEW-CONSID)
		 (PUSH NEW-CONSID NEW-CONSID-LINKS) ) )
	  (T	    ;; partial success -- in this case we set up a GOAL-consid
	     (LET* ((Q-PREM-NODE
		     (CSR:UPDATE-R-GRAPH Q-PREM-CAND R-GRAPH 'KNOWLEDGE 'BASIS) )
		    (S-PREM-QUERY
		      (MAKE-QUERY
			 P-UNIT (NRML-ANL-YZE S-PREM-WFF)
			 WT-CNTXT (R-GRAPH-RB-CONTEXT R-GRAPH) ) )
		    (S-PREM-NODE
		     (CSR:UPDATE-R-GRAPH S-PREM-QUERY R-GRAPH 'TARGET 'FRONTIER))
		    (NEW-CONSID
		     (MAKE-QMP-CONSID
		       ; the following are CONSID- slots INCLUDEd in QMP-CONSID
		       R-GRAPH R-GRAPH
		       PREM-NODES (LIST Q-PREM-NODE S-PREM-NODE)
		       CONCL-NODE RP-TGT-NODE
		       GOAL-NODES (NCONS S-PREM-NODE) ) ) )
		   (CSR:INSTALL-CONSID-LINK NEW-CONSID)
		   (PUSH NEW-CONSID NEW-CONSID-LINKS) ) ) ) ) )
	     (NCONC KF-Q-PREM-CANDS RC-Q-PREM-CANDS) )
	      ;; eventually, we'll want to eliminate any duplications
	      ;;  in these two lists before NCONCing them.
       (COND (NEW-CONSID-LINKS		;; returns a TRIAL-REPORT a-list.
		`((TRIAL-RESULT . SUCCESS)
		  (NUMBER-OF-NEW-CONSIDS . ,(LENGTH NEW-CONSID-LINKS)) ) )
	     (T '((TRIAL-RESULT . FAILURE))) ) ) ) )